package cn.tedu.bailianagent.controller;

import com.alibaba.cloud.ai.dashscope.agent.DashScopeAgent;
import com.alibaba.cloud.ai.dashscope.agent.DashScopeAgentOptions;
import com.alibaba.cloud.ai.dashscope.api.DashScopeAgentApi;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 非流式调用：调用百炼大模型
 * 1.请求URL地址：/ai/bailian/agent/call
 * 2.请求方法：GET
 * 3.请求参数：message（用户输入的问题）
 * 4.参数类型：String
 * 5.返回值类型：String（百炼大模型的回答）
 * 6.异常情况：
 *      1）如果用户输入的问题为空，则返回提示信息：“请输入问题”
 *      2）如果调用百炼大模型失败，则返回提示信息：“调用百炼大模型失败”
 *      3）如果用户输入的问题为空，则返回提示信息：“请输入问题”
 */

@Slf4j
@RestController
@RequestMapping("/ai")
public class BaiLianAgentController {
    // 创建DashScopeAgent对象，用于和百炼大模型进行交互
    private DashScopeAgent agent;
    @Value("${spring.ai.dashscope.agent.options.app-id}")
    private String appId;

    // 构造方法：用于初始化DashScopeAgent对象
    public BaiLianAgentController(DashScopeAgentApi dashScopeAgentApi) {
        this.agent = new DashScopeAgent(dashScopeAgentApi);
    }
    @GetMapping("/bailian/agent/call")
    public String call(@RequestParam("message") String message){
        log.debug("开始处理调用百炼大模型的请求，参数：{}", message);
        log.debug("appId={}", appId);
        // 调用阿里的百炼大模型
        ChatResponse response = agent.call(new Prompt(message,
                DashScopeAgentOptions.builder().withAppId(appId).build()));
        log.debug("阿里百炼大模型返回的结果是：response+{}", response);
        //从返回结果中提取文本[答案]
        String content = response.getResult().getOutput().getText();
        log.debug("从返回结果中提取的文本[答案]是：{}", content);
        return content;
    }
}
